Computer software controls many major aspects of modern life, including air travel, power distribution, banking, medical treatment, traffic control, and a myriad of other essential infrastructures. Unfortunately, weaknesses in software code (such as memory corruption, fixed-width integer computation errors, input validation oversights, and format string vulnerabilities) remain common. Via these weaknesses, attackers are able to hijack an application's intended control flow to violate security policies by exfiltrating secret data, allowing remote access, bypassing authentication, eliminating services, or other techniques.
Unfortunately, modern deployed defenses fail to thoroughly mitigate these threats, even when composed. Some techniques may randomize the addresses to a limited extent used in a program, but unfortunately only some addresses are randomized in modern implementations, and only randomize the base address of loaded functions or modules, not each address within the module. Thus, prior techniques are vulnerable to information-leakage and entropy-exhausting attacks. Other techniques delineate code from data to prevent code-injection attacks. However, arc-injection attacks and various forms of return-oriented programming (ROP) attacks bypass those defensive techniques by reusing code already embedded in the program. Additionally, methods that attempt to effectively address these weaknesses require computational overhead that makes their computational cost prohibitive.
The present invention meets these needs of the many industries that rely on the security of their software, including but not limited to essential infrastructures for government, commerce, and even personal computing.